package com.jt.factory;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;

import java.util.Calendar;
import java.util.Collection;

/**
 * FactoryBean是Spring提供的接口，Spring自动完成调用.获取只从对象
 * 难点讲解：
 *      1.@Component 标识类 则将该类交给Spring容器管理
 *      2.Spring中FactoryBean的讲解 如果Spring加载的时候遇到FactoryBean接口
 *      则会自动执行重写的方法getObject/getObjectType
 *      3.工厂模式说明：
 *          map<key=calendarFactory:value=Calendar对象>
 *        核心功能:
 *                 1. key: 就是当前类型(如果自己编辑注解以注解为准)
 *                 2. value: 调用getObject获取的返回值对象
 *                 将上述的数据,交给Spring容器管理
 *        该功能什么时候使用:
 *                 1. 某些对象不能直接实例化的.
 *                 2. 整合其它第三方框架对象时 经常使用.
 */
@Component("calendar")
public class CalendarFactory implements FactoryBean<Calendar> {

    public CalendarFactory(){
        System.out.println("调用了CalendarFactory工厂模式的无参构造");
    }

    //现阶段大家理解为主，未来写结构设计的时候，作用很大！！！
    //动态的执行该方法，获取返回值对象
    @Override
    public Calendar getObject() throws Exception {
        //利用Calendar的工具API实现对象的创建
        return Calendar.getInstance();
    }

    @Override
    public Class<?> getObjectType() {
        //固定写法，一般直接写xxx.class即可
        return Calendar.class;
    }
}
